gtk-demo: Fix cleanup of search entry demo
authorMatthias Clasen <mclasen@redhat.com>
Mon, 3 Aug 2020 01:53:59 +0000 (21:53 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 3 Aug 2020 01:53:59 +0000 (21:53 -0400)
We can't use the ::destroy signal anymore; use
a weak ref instead, and make ensure the entry
stays around long enough for us to finish the
cleanup.

Fixes: #3004
demos/gtk-demo/search_entry.c

index ff63a42fe645bb2409c08eebd29b4157281283b9..7e2f1d8f76b60631f0df974d2b9983def61145eb 100644 (file)
@@ -37,6 +37,7 @@ static void
 search_progress_done (GtkEntry *entry)
 {
   gtk_entry_set_progress_fraction (entry, 0.0);
+  g_object_unref (entry);
 }
 
 static gboolean
@@ -56,8 +57,9 @@ start_search_feedback (gpointer data)
 {
   gtk_entry_set_progress_fraction (GTK_ENTRY (data), 0.1);
   search_progress_id = g_timeout_add_full (G_PRIORITY_DEFAULT, 100,
-                                           (GSourceFunc)search_progress, data,
+                                           (GSourceFunc)search_progress, g_object_ref (data),
                                            (GDestroyNotify)search_progress_done);
+
   return G_SOURCE_REMOVE;
 }
 
@@ -163,7 +165,8 @@ activate_cb (GtkEntry  *entry,
 }
 
 static void
-search_entry_destroyed (GtkWidget *widget)
+search_entry_destroyed (gpointer  data,
+                        GObject  *widget)
 {
   if (finish_search_id != 0)
     {
@@ -262,8 +265,8 @@ do_search_entry (GtkWidget *do_widget)
       gtk_window_set_display (GTK_WINDOW (window),  gtk_widget_get_display (do_widget));
       gtk_window_set_title (GTK_WINDOW (window), "Search Entry");
       gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
-      g_signal_connect (window, "destroy",
-                        G_CALLBACK (search_entry_destroyed), &window);
+
+      g_object_weak_ref (G_OBJECT (window), search_entry_destroyed, &window);
 
       vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 5);
       gtk_widget_set_margin_start (vbox, 5);